/*
 * sysmo 客户端发送的警报消息
 * Copyright (C) 2009  YuLicheng
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.sysmo.server.node.item;

import java.util.Date;
import org.sysmo.db.DatabaseInterface;
import org.sysmo.db.DbWarning;
import org.sysmo.server.util.InstanceNotInitializedException;

/**
 * 
 * 此类表示了客户端发送的警报消息。消息中保存了警报ID、所属的监控项以及警报消息内容。
 *
 * @author YuLicheng
 */
public class Warning {

    private DatabaseInterface dbInterface;
    private DbWarning warning;

    /**
     * 创建一个警告实例。
     *
     * @param dbInterface 数据库接口。
     * @param message 警告消息。
     */
    public Warning(DatabaseInterface dbInterface, String message, Date time) {
        this.dbInterface = dbInterface;
        warning = new DbWarning();
        warning.message = message;
        //TODO: 为DbWarning设置新建对象的ID。
        warning.rid = 0;
        warning.time = DatabaseInterface.convertDate(time);
    }

    /**
     * 从数据库中以记录ID提取警告项。
     *
     * @param dbInterface 数据库接口。
     * @param rid 警告项ID。
     * @throws WarningNotExistsException ID不存在。
     */
    public Warning(DatabaseInterface dbInterface, int rid)
            throws WarningNotExistsException {
        this.dbInterface = dbInterface;
        try {
            warning = dbInterface.query_WarningTable(rid);
            if (warning == null) {
                throw new WarningNotExistsException(rid);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 以DbWarning对象生成Warning对象。
     *
     * @param dbInterface 数据库接口。
     * @param warning 数据库记录。
     */
    public Warning(DatabaseInterface dbInterface, DbWarning warning) {
        this.dbInterface = dbInterface;
        this.warning = warning;
    }

    /**
     * 获取警报消息。
     *
     * @return 警报消息。
     */
    public String getMessage() {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        return warning.message;
    }

    /**
     * 获取警告生成的时间。
     *
     * @return 警告时间。
     */
    public Date getTime() {
        return DatabaseInterface.convertDate(warning.time);
    }

    /**
     * 设置此警告所属的监控项ID。
     *
     * @param itemID 所属监控项ID。
     */
    public void setItemID(int itemID) {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        warning.iid = itemID;
    }

    /**
     * 获取所属监控项ID。
     *
     * @return 所属监控项ID。
     */
    public int getItemID() {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        return warning.iid;
    }

    /**
     * 获取所属客户端节点ID。
     *
     * @return 所属客户端节点ID。
     */
    public int getNodeID() {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        return warning.cid;
    }

    /**
     * 设置所属客户端节点ID。
     *
     * @param nodeID 所属客户端节点ID。
     */
    public void setNodeID(int nodeID) {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        warning.cid = nodeID;
    }

    /**
     * 获得所属图标ID。
     *
     * @return 所属图标ID。
     */
    public int getGraphID() {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        return warning.gid;
    }

    /**
     * 设置所属图表ID。
     *
     * @param graphID 所属的图表ID。
     */
    public void setGraphID(int graphID) {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        warning.gid = graphID;
    }

    /**
     * 获得所属监控值ID。
     *
     * @return 所属监控值ID。
     */
    public int getValueID() {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        return warning.vid;
    }

    /**
     * 设置所属监控值ID。
     *
     * @param valueID 所属监控值ID。
     */
    public void setValueID(int valueID) {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        warning.vid = valueID;
    }

    /**
     * 获取警告ID。
     *
     * @return 此警告的ID。
     */
    public int getID() {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        return warning.wid;
    }

    /**
     * 获得所属记录项ID。
     *
     * @return 所属记录项ID。
     */
    public int getResultID() {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        return warning.rid;
    }

    /**
     * 设置所属记录项ID。
     *
     * @param resultID 所属记录项ID。
     */
    public void setResultID(int resultID) {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        warning.rid = resultID;
    }

    /**
     * 将当前警报的信息写入数据库。
     */
    public void saveData() {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        try {
            dbInterface.update_WarningTable(warning);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 将此项从数据库中删除。
     */
    public void remove() {
        if (warning == null) {
            throw new InstanceNotInitializedException();
        }
        try {
            dbInterface.delete_WarningTable(warning.wid);
        } catch (Exception e) {
            e.printStackTrace();
        }
        warning = null;
    }

}
